package be.ipl.finito.usecases;

import java.util.List;

import javax.ejb.Remote;

import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.exceptions.ArgumentInvalideException;
import be.ipl.finito.exceptions.JoueurDejaInscritException;
import be.ipl.finito.exceptions.JoueurInExistantException;
import be.ipl.finito.exceptions.PartieException;
import be.ipl.finito.exceptions.PartieInExistanteException;
import be.ipl.finito.exceptions.PlateauInExistantException;


@Remote
public interface GestionPartie {

	Partie creerPartie(String nomPartie) throws ArgumentInvalideException, PartieException;
	
	Partie rejoindrePartie(int id, Joueur joueur) throws ArgumentInvalideException, PartieInExistanteException, JoueurInExistantException, JoueurDejaInscritException;

	List<Partie> listerPartiesEnAttente();
	
	Partie chercherPartie(int id) throws ArgumentInvalideException, PartieInExistanteException;
	
	Partie deplacerJeton(String login, String nomPartie, int position) throws ArgumentInvalideException;
	
	int nbrJoueurs(int idPartie);
	
	boolean annulerPartie(int idPartie, Joueur joueur) throws PartieInExistanteException, JoueurInExistantException;
	
	List<Partie> listerParties();

	Partie commencerPartie(int idPartie, Joueur j) throws PartieInExistanteException, JoueurInExistantException;

	boolean estCommencee(int idPartie) throws PartieInExistanteException;

	boolean estAnnulee(int idPartie) throws PartieInExistanteException;

	Partie chargeTour(int idPartie) throws PartieInExistanteException;

	boolean placerJeton(Joueur joueur, Partie partie, int position) throws JoueurInExistantException, PartieInExistanteException, PlateauInExistantException;
}
